// import axios, { AxiosRequestConfig, AxiosResponse, InternalAxiosRequestConfig } from "axios";
import axios,{AxiosRequestConfig,AxiosResponse,InternalAxiosRequestConfig} from "./axios";
const base = "http://localhost:8080";
//发送get和post请求
interface Person {
  name: string;
  age: number;
}
let person: Person = {
  name: "xhm",
  age: 1,
};
let requestConfig: AxiosRequestConfig = {
  url: `${base}/get`,
  method: "get",
  params: person,
};
let requestConfigPost: AxiosRequestConfig = {
  url: `${base}/post`,
  method: "post",
  data: person,
  headers: {
    "Content-Type": "application/json",
    name:1111
  },
  timeout: 1000,
};
// axios(requestConfig).then((res:AxiosResponse)=>{
//     console.log(11,res);

// }).catch((err:any)=>{
//     console.log('err',err);

// })
//1、请求拦截器：装饰器的执行顺序是从下往上执行，是倒叙执行，结果是//111-》333-》222
const r1=axios.interceptors.request.use((config: InternalAxiosRequestConfig) => {
    return new Promise((resolve)=>{//我们拦截可以使用promise作为返回值，返回config或者response，不影响返回值
        setTimeout(()=>{
            config.headers.name+='222'
            resolve(config)
        },3000)
    })
    // return Promise.reject('出错') //直接走到axios catch里面
   
},(err)=>{
    console.log('interceptors-err',err);
    
});
axios.interceptors.request.use((config: InternalAxiosRequestConfig) => {
    config.headers.name+='333'
  return config;
},(err)=>{
    console.log('interceptors-err',err);
    
});
//请求拦截器：弹射掉r1拦截器，相当于删除r1拦截器
axios.interceptors.request.eject(r1)
//2、响应拦截器
//响应拦截器执行顺序是a->b->c，正序执行
//还可以执行promise
axios.interceptors.response.use((response)=>{
    response.data.name+='a'
    return response;
})
const r2=axios.interceptors.response.use((response)=>{
    response.data.name+='c'
    return response;
})
axios.interceptors.response.use((response)=>{
    response.data.name+='d'
    return response;
})


//响应拦截器：弹射掉r2拦截器，相当于删除r2拦截器
axios.interceptors.response.eject(r2)

axios(requestConfigPost)
  .then((res: AxiosResponse) => {
    console.log(2222, res);
  })
  .catch((err: any) => {
    console.error("err", err);
  });

//失败有几种情况
//1、网路失败 （怎么模拟，设置超时请求，网页成功打开后，断开浏览器网络）
//2、根据状态码来决定失败
//3、超时处理
